package com.dy.course.util;

import org.springframework.util.StringUtils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtUtil {

	private static final String SECRET_KEY = "course";
	public static final String JWT_HEADER_KEY = "userJwt";

	public static String buildJwt(String value) {
		String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, SECRET_KEY)// SECRET_KEY是加密算法对应的密钥，这里使用额是HS256加密算法
				.setExpiration(DateUtil.now()).claim("phone", value).compact();
		return jwt;
	}

	public static boolean isJwtValid(String jwt, String phone) {
		if (StringUtils.isEmpty(jwt) || StringUtils.isEmpty(phone)) {
			return false;
		}
		try {
			// 解析JWT字符串中的数据，并进行最基础的验证
			Claims claims = Jwts.parser().setSigningKey(SECRET_KEY)// SECRET_KEY是加密算法对应的密钥，jjwt可以自动判断机密算法
					.parseClaimsJws(jwt)// jwt是JWT字符串
					.getBody();
			String vaule = claims.get("phone", String.class);// 获取自定义字段key
			// 判断自定义字段是否正确
			if (phone.equals(vaule)) {
				return true;
			} else {
				return false;
			}
		}
		// 在解析JWT字符串时，如果密钥不正确，将会解析失败，抛出SignatureException异常，说明该JWT字符串是伪造的
		// 在解析JWT字符串时，如果‘过期时间字段’已经早于当前时间，将会抛出ExpiredJwtException异常，说明本次请求已经失效
		catch (Exception e) {
			return false;
		}
	}

}
